package br.com.rentalcar.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.rentalcar.domain.Cliente;
import br.com.rentalcar.factory.ConexaoFactory;

public class ClienteDao {

	public void salvar(Cliente cliente) throws SQLException {

		Connection connection = ConexaoFactory.conectar();

		String sql = "INSERT INTO Cliente(nomeCliente, logradouro, cidade, estado, telefone, celular, email, cpf, dtNasc, nomePai, nomeMae)"
				+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

		PreparedStatement smt = connection.prepareStatement(sql);

		smt.setString(1, cliente.getNomeCliente());
		smt.setString(2, cliente.getLogradouro());
		smt.setString(3, cliente.getCidade());
		smt.setString(4, cliente.getEstado());
		smt.setString(5, cliente.getTelefone());
		smt.setString(6, cliente.getCelular());
		smt.setString(7, cliente.getEmail());
		smt.setString(8, cliente.getCpf());
		smt.setDate(9, (Date) cliente.getDtnasc());
		smt.setString(10, cliente.getNomePai());
		smt.setString(11, cliente.getNomeMae());
		smt.executeUpdate();
	}

	public void excluir(Cliente cliente) throws SQLException {

		Connection connection = ConexaoFactory.conectar();

		String sql = "DELETE FROM cliente WHERE idcliente=?";

		PreparedStatement smt = connection.prepareStatement(sql);

		smt.setLong(1, cliente.getIdCliente());
		smt.executeUpdate();
		smt.close();
	}

	public List<Cliente> listar() throws SQLException {

		List<Cliente> lista = new ArrayList<Cliente>();

		Connection connection = ConexaoFactory.conectar();

		String sql = "SELECT *FROM Cliente";

		PreparedStatement smt = connection.prepareStatement(sql);

		ResultSet rs = smt.executeQuery();

		Cliente cliente;

		while (rs.next()) {

			Long idCliente = rs.getLong("idcliente");
			String nomeCliente = rs.getString("nomeCliente");
			String logradouro = rs.getString("logradouro");
			String cidade = rs.getString("cidade");
			String estado = rs.getString("estado");
			String telefone = rs.getString("telefone");
			String celular = rs.getString("celular");
			String email = rs.getString("email");
			String cpf = rs.getString("cpf");
			Date dtNasc = rs.getDate("dtNasc");
			String nomeMae = rs.getString("nomeMae");
			String nomePai = rs.getString("nomePai");

			cliente = new Cliente();

			cliente.setIdCliente(idCliente);
			cliente.setNomeCliente(nomeCliente);
			cliente.setLogradouro(logradouro);
			cliente.setCidade(cidade);
			cliente.setEstado(estado);
			cliente.setTelefone(telefone);
			cliente.setCelular(celular);
			cliente.setEmail(email);
			cliente.setCpf(cpf);
			cliente.setDtnasc(dtNasc);
			cliente.setNomeMae(nomeMae);
			cliente.setNomePai(nomePai);

			lista.add(cliente);
		}

		return lista;

	}

	public Cliente recuperarCliente(Long idCliente) throws SQLException {

		Cliente cliente = new Cliente();
		try {

			Connection connection = ConexaoFactory.conectar();

			PreparedStatement smt = connection
					.prepareStatement("SELECT idcliente, nomeCliente, logradouro, cidade, estado, telefone, celular, email, cpf, dtNasc, nomePai, nomeMae FROM cliente WHERE idcliente = ?");

			smt.setLong(1, idCliente);

			ResultSet rs = smt.executeQuery();

			cliente = new Cliente();

			while (rs.next()) {

				cliente.setIdCliente(rs.getLong(1));
				cliente.setNomeCliente(rs.getString(2));
				cliente.setLogradouro(rs.getString(3));
				cliente.setCidade(rs.getString(4));
				cliente.setEstado(rs.getString(5));
				cliente.setTelefone(rs.getString(6));
				cliente.setCelular(rs.getString(7));
				cliente.setEmail(rs.getString(8));
				cliente.setCpf(rs.getString(9));
				cliente.setDtnasc(rs.getDate(10));
				cliente.setNomeMae(rs.getString(11));
				cliente.setNomePai(rs.getString(12));

			}

		} catch (SQLException e) {
			System.err.println("Erro na consulta: " + e.getMessage());
		}

		return cliente;

	}
	
	public void atualizar(Cliente cliente) throws SQLException{
		
		Connection connection = ConexaoFactory.conectar();
		
		String sql = "UPDATE cliente SET idcliente = ?, nomeCliente = ?, logradouro = ?, cidade = ?, estado = ?, telefone = ?, celular = ?, email = ?, cpf = ?, dtNasc = ?, nomePai = ?, nomeMae = ? WHERE idcliente = ?";
		
		PreparedStatement smt = connection.prepareStatement(sql);
		
		smt.setLong(1, cliente.getIdCliente());
		smt.setString(2, cliente.getNomeCliente());
		smt.setString(3, cliente.getLogradouro());
		smt.setString(4, cliente.getCidade());
		smt.setString(5, cliente.getEstado());
		smt.setString(6, cliente.getTelefone());
		smt.setString(7, cliente.getCelular());
		smt.setString(8, cliente.getEmail());
		smt.setString(9, cliente.getCpf());
		smt.setDate(10, (Date) cliente.getDtnasc());
		smt.setString(11, cliente.getNomePai());
		smt.setString(12, cliente.getNomeMae());
		smt.setLong(13, cliente.getIdCliente());
		
		smt.executeUpdate();
		smt.close();
	}

}
